<?php
/*
信息操作类
任何信息都分:增 删 改 查,其它信息类以他为基类
或者其它类由多个模型组合而成
@time:2012-11-20
@author:Jack Brown
@version:1.4
*/
if(!defined('IN_WEB')){
	exit('Access Deny!');
}

class infor extends dataBase{
	
	/*模型表名*/
	protected $modTable;
	
	/*模型唯一标识名*/
	protected $modKey='id';
	
	protected $modItems = array();
	
	/*保存表的结构,减少重复获取*/
	protected static $hasSavedItem = array();
	
	
	/*
	 * 信息唯一确定的值
	 */
	protected $modVal;
	
	
	/*
	 * 构造
	*/
	public function __construct($mod,$key,$value=''){
		
		parent::__construct();
		$this->modTable = $mod;
		$this->modKey   = $key;
		$this->modVal   = $value;
		$this->init();
	}
	
	
	/*
	便于继承时使用
	*/
	protected function init(){
		
		
		if($this->modTable=='' || $this->modTable==null){
			return false;	
		}
		

		if(!$this->existsTable($this->modTable)){				
			$this->error($this->modTable.'模型表不存在!');
			return false;
		}			
		
				
		/*性能优化*/
		if(self::$hasSavedItem[$this->modTable]!=null){
			
			$this->modItems = self::$hasSavedItem[$this->modTable];
		}else{
			$this->modItems = $this->getTableFields($this->modTable);
			self::$hasSavedItem[$this->modTable] = $this->modItems;
		}
		
	    if(!in_array($this->modKey,$this->modItems)){
			
			$this->error($this->modTable.'唯一标识符'.$this->modKey.'不存在!');
			return false;
		}
		
		if($this->modVal != ''){
			$key = $this->modKey;
			$this->$key = $this->modVal;
			
		}
		
		
		
	}
	
	/*
	获取模型中的信息项
	@param string/array $item 项目名称
	@return array 信息项数组
	*/
	public function get($item,$where=''){
		
		if($this->modItems == null){
			
			return false;	
		}
		
		if(is_array($item)){
			
			if(!arrInArray($item,$this->modItems)){
				
				return false;
			}
			
		}else{
			
			if(strstr($item,',')){
				
				$this->error('项目不能用,号隔开，请使用数组!');
				return false;
			}
			
			if($item!='*' && !in_array($item,$this->modItems)){
				
				return false;	
			}
			
			if($item == '*'){
					
				$item = $this->modItems;
			}
			
		}
		
		
		$infor = $this->getRecords($this->modTable,$item,'',$this->modKey."='".$this->modVal."' ".$where,1,true);
			
		
		if($infor == null){
			return false;
		}
		$infor = $infor[0];
		
		foreach($infor as $k=>$v){
			
			$this->$k = $v;	
		}
		
		if(is_array($item)){
			return $infor;
		}else{
			return $infor[$item];
		}
	}
	
	public function setModKey($keyName){
		
		if($keyName==''){
			return false;
		}
		
	    if(!in_array($keyName,$this->modItems)){
			
			$this->error($this->modTable.'唯一标识符'.$this->modKey.'不存在!');
			return false;
		}
	
		$this->modKey = $keyName;
		if($this->$keyName != null){
			$this->modVal = $this->$keyName;
		}
	}
	
	public function setKeyVal($val){
		$this->modVal = $val;
	}
	
	/*
	修改信息项
	*/
	public function set($item){

		if($this->modItems == null){
			return false;	
		}

		if(!is_array($item)){
			return false;
		}
		
		if(!arrInArray(array_keys($item),$this->modItems)){
			return false;
		}
		
		$res = $this->update($this->modTable,$item,$this->modKey."='".$this->modVal."'");
		
		if($res){
			foreach($item as $k=>$v){
	
				$this->$k = $v;	
			}
		}
		
		return $res;
	}
	
	
	/*
	添加项
	*/
	public function add($item){
		
		if($this->modItems == null){
			return false;	
		}

		if(!is_array($item)){
			return false;
		}
		
		if(!arrInArray(array_keys($item),$this->modItems)){
			
			return false;
		}

		return $this->insert($this->modTable,$item);
		
	}
	
	
	/*
	移除项
	*/
	public function remove(){
		
		if($this->modItems == null){
			
			return false;	
		}
		
		if(!$this->modVal){
			return false;
		}
		
		return $this->deleteRecord($this->modTable,$this->modKey."='".$this->modVal."'");
		
	}
	
	/*
	异常报告
	*/
	protected function error($exception){	
		
		if(class_exists('error') && is_object($GLOBALS['error'])){			
			$GLOBALS['error']->showErrorStr(get_class($this).';'.$exception,'javascript:history.back()',false);
		}else{
			throw new Exception(get_class($this).';'.$exception);
		}
	}
	
}

?>